import type { MidiItem } from "@/lib/midi";
import type { MapperConfig } from "@/lib/api";

/**
 * 播放状态
 */
export enum PlayState {
    /**
     * 停止播放
     */
    Stop,
    /**
     * 正在播放
     */
    Play,
}

/**
 * 播放模式
 */
export enum PlayMode {
    /**
     * 单次播放
     */
    Once,
    /**
     * 单曲循环
     */
    Single,
    /**
     * 顺序播放
     */
    Order,
    /**
     * 循环播放
     */
    Loop,
}

/**
 * 播放列表中的播放体对象
 */
export interface PlaylistPlayer {
    /**
     * Midi ID
     */
    id: string;

    /**
     * 名称
     */
    name: string;

    /**
     * 播放状态
     */
    state: PlayState;

    /**
     * 播放起始时间
     */
    start: Date;

    /**
     * 进度（单位：毫秒）
     */
    point: number;

    /**
     * 总时长（单位：毫秒）
     */
    duration: number;
}

/**
 * 播放列表对象
 */
export interface PlaylistObject {
    /**
     * 列表项
     */
    items: MidiItem[];

    /**
     * 列表项索引列表
     */
    indexes: number[];

    /**
     * 列表项索引
     */
    focus: number;

    /**
     * 是否随机播放
     */
    shuffle: boolean;

    /**
     * 播放模式
     */
    mode: PlayMode;

    /**
     * 映射器配置
     */
    mapper: MapperConfig;

    /**
     * 播放体
     */
    player: PlaylistPlayer;
}

/**
 * 播放列表对象的键
 */
export type PlaylistObjectKey = keyof PlaylistObject;
